package main

import "fmt"

func gen() {
	fmt.Println("aaaa")
	panic("error")

}

func main() {
	fmt.Println(5)

	// panic("error")

	defer func() {
		fmt.Println(1)
	}()

	defer func() {
		fmt.Println(2)
	}()

	gen()

	defer func() {
		fmt.Println(3)
	}()

	fmt.Println(4)

}

// 如果有panic，panic之后的代码都不会执行，包括之后创建的defer语句，因此defer应该尽量在用户代码执行前声明
// panic之前的defer语句会倒序执行

// 5
//aaaa
//2
//1
//panic: error
